package leetcode;

import java.util.HashSet;
import java.util.Set;
import java.util.Stack;

/**
 * @author oyz
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串的长度。
 */
public class Code3 {

    public static int lengthOfLongestSubstring(String s) {
        // 用hashSet来存放不重复的元素
        Set<Character> set = new HashSet<>();
        int length = s.length();
        // 定义右指针,最大长度
        int right = -1 , maxLength = 0;
        for(int i = 0; i < length; i++) {
            if(i>0){
                // 去除掉队首元素
                set.remove(s.charAt(i-1));
            }
            while(right+1< length && !set.contains(s.charAt(right+1))){

                // 加入当前元素
                set.add(s.charAt(right+1));
                // 如果不包含,就一直右移
                ++right;
            }
            maxLength = Math.max(maxLength,right -i+1);
        }
        return  maxLength;
    }


    public static void main(String[] args) {
        int length = Code3.lengthOfLongestSubstring("abcabcbb");
        System.out.println(length);
    }
}
